<?php
class Mapper_Gebruiker extends DBTable{

	public function __construct(Database $db = null){
		parent::__construct("gebruiker", $db);
	}

	private function getDefault($key, $value){
		$query = "
SELECT
	gebruiker.*,
	woonplaats.*,
	profielicoon.*,
	leeftijdscategorie.*,
	IFNULL((
		SELECT
			true
		FROM
			dienst_afgenomen
		WHERE
			dienst_afgenomen.gebruiker_id = gebruiker.gebruiker_id
	),IFNULL((
		SELECT
			true
		FROM
			dienst_aangeboden
		WHERE
			dienst_aangeboden.gebruiker_id = gebruiker.gebruiker_id
	),IFNULL((
		SELECT
			true
		FROM
			dienst_gevraagd
		WHERE
			dienst_gevraagd.gebruiker_id = gebruiker.gebruiker_id
	), false))) AS IsInUse
FROM
	gebruiker
LEFT JOIN woonplaats USING(woonplaats_id)
LEFT JOIN profielicoon USING(profielicoon_id)
LEFT JOIN leeftijdscategorie USING(leeftijdscategorie_id)
WHERE
	{$key} = :{$key}";

		$stmt = $this->prepare($query);
		$stmt->bindParam(":{$key}", $value);

		return $stmt->fetchObjectOnce("Gebruiker");
	}

	public function get($gebruiker_id){
		return $this->getDefault("gebruiker_id", $gebruiker_email);
	}

	public function getByEmail($gebruiker_email){
		return $this->getDefault("gebruiker_email", $gebruiker_email);
	}

	public function getAll(){
		$query = "
SELECT
	gebruiker.*,
	woonplaats.*,
	profielicoon.*,
	leeftijdscategorie.*,
	IFNULL((
		SELECT
			true
		FROM
			dienst_afgenomen
		WHERE
			dienst_afgenomen.gebruiker_id = gebruiker.gebruiker_id
	),IFNULL((
		SELECT
			true
		FROM
			dienst_aangeboden
		WHERE
			dienst_aangeboden.gebruiker_id = gebruiker.gebruiker_id
	),IFNULL((
		SELECT
			true
		FROM
			dienst_gevraagd
		WHERE
			dienst_gevraagd.gebruiker_id = gebruiker.gebruiker_id
	), false))) AS IsInUse
FROM
	gebruiker
LEFT JOIN woonplaats USING(woonplaats_id)
LEFT JOIN profielicoon USING(profielicoon_id)
LEFT JOIN leeftijdscategorie USING(leeftijdscategorie_id)";

		return $this->prepare($query)->fetchObjectAll("Gebruiker");
	}
}